import { usePermissionStore } from '../store/permission'
import { useUserStore } from '../store/user'
import { useRoleStore, ROLE_CODES } from '../store/role'

/**
 * 权限助手类
 * 提供权限和角色相关的工具方法
 */
class PermissionHelper {
  /**
   * 检查用户是否是超级管理员
   * @returns boolean
   */
  isSuperAdmin(): boolean {
    try {
      const userStore = useUserStore()
      const userRoles = userStore.getUserInfo.roles || []
      return userRoles.includes(ROLE_CODES.SUPER_ADMIN)
    } catch (error) {
      console.error('检查超级管理员失败:', error)
      return false
    }
  }

  /**
   * 检查是否有指定权限
   * @param permission 权限标识
   * @returns boolean
   */
  hasPermission(permission: string): boolean {
    if (!permission) return true
    
    // 超级管理员拥有所有权限
    if (this.isSuperAdmin()) return true
    
    try {
      const permissionStore = usePermissionStore()
      return permissionStore.hasPermission(permission)
    } catch (error) {
      console.error('检查权限失败:', error)
      return false
    }
  }
  
  /**
   * 检查是否有指定权限中的任意一个
   * @param permissions 权限标识数组
   * @returns boolean
   */
  hasAnyPermission(permissions: string[]): boolean {
    if (!permissions || permissions.length === 0) return true
    
    // 超级管理员拥有所有权限
    if (this.isSuperAdmin()) return true
    
    try {
      const permissionStore = usePermissionStore()
      return permissionStore.hasAnyPermission(permissions)
    } catch (error) {
      console.error('检查权限失败:', error)
      return false
    }
  }
  
  /**
   * 检查是否有指定权限中的所有权限
   * @param permissions 权限标识数组
   * @returns boolean
   */
  hasAllPermissions(permissions: string[]): boolean {
    if (!permissions || permissions.length === 0) return true
    
    // 超级管理员拥有所有权限
    if (this.isSuperAdmin()) return true
    
    try {
      const permissionStore = usePermissionStore()
      return permissionStore.hasAllPermissions(permissions)
    } catch (error) {
      console.error('检查权限失败:', error)
      return false
    }
  }
  
  /**
   * 检查是否有指定按钮权限
   * @param buttonKey 按钮权限标识
   * @param menuPath 菜单路径
   * @returns boolean
   */
  hasButtonPermission(buttonKey: string, menuPath?: string): boolean {
    if (!buttonKey) return false
    
    // 超级管理员拥有所有权限
    if (this.isSuperAdmin()) return true
    
    try {
      const permissionStore = usePermissionStore()
      
      // 如果未指定菜单路径，使用当前路径
      const currentPath = menuPath || window.location.pathname
      return permissionStore.hasButtonPermission(currentPath, buttonKey)
    } catch (error) {
      console.error('检查按钮权限失败:', error)
      return false
    }
  }
  
  /**
   * 检查是否有指定角色
   * @param role 角色标识
   * @returns boolean
   */
  hasRole(role: string | string[]): boolean {
    // 超级管理员拥有所有角色权限
    if (this.isSuperAdmin()) return true
    
    try {
      const userStore = useUserStore()
      const userRoles = userStore.getUserInfo.roles || []
      
      if (Array.isArray(role)) {
        // 检查是否有任一角色
        return role.some(r => userRoles.includes(r))
      } else {
        // 检查单个角色
        return userRoles.includes(role)
      }
    } catch (error) {
      console.error('检查角色失败:', error)
      return false
    }
  }
  
  /**
   * 检查是否有指定角色中的所有角色
   * @param roles 角色标识数组
   * @returns boolean
   */
  hasAllRoles(roles: string[]): boolean {
    if (!roles || roles.length === 0) return true
    
    // 超级管理员拥有所有角色权限
    if (this.isSuperAdmin()) return true
    
    try {
      const userStore = useUserStore()
      const userRoles = userStore.getUserInfo.roles || []
      
      return roles.every(role => userRoles.includes(role))
    } catch (error) {
      console.error('检查角色失败:', error)
      return false
    }
  }
}

// 创建单例实例
const permissionHelper = new PermissionHelper()

export default permissionHelper 